<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>let/var/const之间的区别</h1>

<script>

    //1.var
    //使用 var 在全局级别（在函数外部）进行声明都会自动成为 window 对象上的一个属性。
    /*
    var add = '陕西省西安市长安路6号';
    var zone; //不初始化会输出undefined

    function fn(){
        num = 100; //这里等同定义了新的全局变量
    }

    console.log(add);
    console.log(window.add==add);
    console.log(zone);

    fn();
    console.log(num);
    */

    //2.let
    //使用 let在函数外部声明一个变量，它不会被添加到 window 对象中。
    /*
    let add = '陕西省西安市长安路6号';
    let zone; //不初始化会输出undefined

    function fn(){
        let num = 100; //这里是局部变量
    }
    console.log(add);
    console.log(window.add==add);
    console.log(zone);

    fn();
    console.log(num);
    */

    //let是块级作用域，离开了let所在的块作用域，即便在同一个函数内也无法访问。
    /*
    let add = '陕西省西安市长安路6号';
    let zone; //不初始化会输出undefined

    function fn() {
        {
            let num = 100; //块级变量
            console.log("块内=>num="+num);
        }
        console.log("块外=>num="+num); //这里已经抛出异常。
    }

    console.log(add);
    console.log(window.add == add);
    console.log(zone);

    fn();
    console.log(num);
    */

    /*
    let add = '陕西省西安市长安路6号';
    let zone; //不初始化会输出undefined

    function fn() {
        {
            var num = 100; //这里等同定义了新的全局变量
            console.log("块内=>num="+num);
        }
        console.log("块外=>num="+num);
    }

    console.log(add);
    console.log(window.add == add);
    console.log(zone);

    fn();
    console.log(num);
    */

    //3.const
    const add = '陕西省西安市长安路6号';
    //const zone; //错误，const必须初始化。赋初值。
    const person = {
        name:'张三',
        gender:'男',
        age:30
    }
    //person = {}; //错误，不能指向新对象。
    person.gender = '女' //const类型的引用，可以修改属性值。

    function fn() {
        const num = 100;
    }
    console.log(add);
    console.log(window.add == add);
    console.log(person);
    console.log(num);


</script>
</body>
</html>